From: Chris Swindle Date: Sun, 22 Oct 2017 06:46:50 +0000 (+0100) Subject: Add support for other registries in dependencies. X-Git-Tag: archive/raspbian/0.35.0-2+rpi1~3^2^2^2^2^2^2^2~22^2~5^2~30^2~6 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=280f10ecb4d8a1e4487e7d39547b31e66aedf802;p=cargo.git Add support for other registries in dependencies. --- diff --git a/src/cargo/core/dependency.rs b/src/cargo/core/dependency.rs old mode 100644 new mode 100755 diff --git a/src/cargo/core/resolver/mod.rs b/src/cargo/core/resolver/mod.rs old mode 100644 new mode 100755 diff --git a/src/cargo/sources/registry/mod.rs b/src/cargo/sources/registry/mod.rs old mode 100644 new mode 100755 index 8b907f7d3..4a49ee1b9 --- a/src/cargo/sources/registry/mod.rs +++ b/src/cargo/sources/registry/mod.rs @@ -175,6 +175,7 @@ use sources::PathSource; use util::{CargoResult, Config, internal, FileLock, Filesystem}; use util::errors::CargoResultExt; use util::hex; +use util::to_url::ToUrl; const INDEX_LOCK: &'static str = ".cargo-index-lock"; pub static CRATES_IO: &'static str = "https://github.com/rust-lang/crates.io-index"; @@ -224,6 +225,7 @@ struct RegistryDependency<'a> { default_features: bool, target: Option>, kind: Option>, + index: Option, } pub trait RegistryData { @@ -483,12 +485,18 @@ impl<'de> de::Deserialize<'de> for DependencyList { fn parse_registry_dependency(dep: RegistryDependency) -> CargoResult { let RegistryDependency { - name, req, features, optional, default_features, target, kind + name, req, features, optional, default_features, target, kind, index } = dep; - let mut dep = DEFAULT_ID.with(|id| { - Dependency::parse_no_deprecated(&name, Some(&req), id) - })?; + let id = if let Some(index) = index { + SourceId::for_registry(&index.to_url()?)? + } else { + DEFAULT_ID.with(|id| { + id.clone() + }) + }; + + let mut dep = Dependency::parse_no_deprecated(&name, Some(&req), &id)?; let kind = match kind.as_ref().map(|s| &s[..]).unwrap_or("") { "dev" => Kind::Development, "build" => Kind::Build, @@ -512,5 +520,6 @@ fn parse_registry_dependency(dep: RegistryDependency) .set_features(features) .set_platform(platform) .set_kind(kind); + Ok(dep) } diff --git a/tests/alt-registry.rs b/tests/alt-registry.rs index fed6ae0c7..fdd535456 100755 --- a/tests/alt-registry.rs +++ b/tests/alt-registry.rs @@ -208,7 +208,8 @@ fn alt_registry_dep_with_crates_io_dep() { .file("src/main.rs", "fn main() {}"); p.build(); - Package::new("alt_reg_dep", "0.1.1").alternative(true).dep("crates_io_dep", "0.0.2").publish(); + Package::new("crates_io_dep", "0.0.2").publish(); + Package::new("alt_reg_dep", "0.1.1").alternative(true).registry_dep("crates_io_dep", "0.0.2", registry::registry().as_str()).publish(); assert_that(p.cargo("build").masquerade_as_nightly_cargo(), execs().with_status(0).with_stderr(&format!("\ @@ -216,8 +217,8 @@ fn alt_registry_dep_with_crates_io_dep() { [UPDATING] registry `{crates_io_reg}` [DOWNLOADING] alt_reg_dep v0.1.1 (registry `file://[..]`) [DOWNLOADING] crates_io_dep v0.0.2 (registry `file://[..]`) +[COMPILING] crates_io_dep v0.0.2 (registry `file://[..]`) [COMPILING] alt_reg_dep v0.1.1 (registry `file://[..]`) -[COMPILING] crates_io_dep v0.0.2 [COMPILING] foo v0.0.1 ({dir}) [FINISHED] dev [unoptimized + debuginfo] target(s) in [..] secs ", diff --git a/tests/cargotest/support/registry.rs b/tests/cargotest/support/registry.rs old mode 100644 new mode 100755 index 1e0b28cd0..b303d4dc2 --- a/tests/cargotest/support/registry.rs +++ b/tests/cargotest/support/registry.rs @@ -39,6 +39,7 @@ struct Dependency { kind: String, target: Option, features: Vec, + index: Option, } pub fn init() { @@ -116,25 +117,32 @@ impl Package { } pub fn dep(&mut self, name: &str, vers: &str) -> &mut Package { - self.full_dep(name, vers, None, "normal", &[]) + self.full_dep(name, vers, None, "normal", &[], None) } pub fn feature_dep(&mut self, name: &str, vers: &str, features: &[&str]) -> &mut Package { - self.full_dep(name, vers, None, "normal", features) + self.full_dep(name, vers, None, "normal", features, None) } pub fn target_dep(&mut self, name: &str, vers: &str, target: &str) -> &mut Package { - self.full_dep(name, vers, Some(target), "normal", &[]) + self.full_dep(name, vers, Some(target), "normal", &[], None) + } + + pub fn registry_dep(&mut self, + name: &str, + vers: &str, + index: &str) -> &mut Package { + self.full_dep(name, vers, None, "normal", &[], Some(index)) } pub fn dev_dep(&mut self, name: &str, vers: &str) -> &mut Package { - self.full_dep(name, vers, None, "dev", &[]) + self.full_dep(name, vers, None, "dev", &[], None) } fn full_dep(&mut self, @@ -142,13 +150,15 @@ impl Package { vers: &str, target: Option<&str>, kind: &str, - features: &[&str]) -> &mut Package { + features: &[&str], + index: Option<&str>) -> &mut Package { self.deps.push(Dependency { name: name.to_string(), vers: vers.to_string(), kind: kind.to_string(), target: target.map(|s| s.to_string()), features: features.iter().map(|s| s.to_string()).collect(), + index: index.map(|s| s.to_string()), }); self } @@ -171,6 +181,7 @@ impl Package { "target": dep.target, "optional": false, "kind": dep.kind, + "index": dep.index, }) }).collect::>(); let cksum = {